<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03-js异步执行</title>
</head>
<body>
    <script>
        /*
            同步：事情一件一件地做，在代码中的体现的就是函数一段一段的执行 --- 计算机在执行代码的过程中，同一时间点，只能做一件事情
                  同步强调必须有结果，才能做下一件事情

            异步：事情可以一起做，但是需要叫号的，代码可以先行在执行栈里进行挂号，挂完号之后，就可以等着了，剩下就是到哪一个时间点，哪一段代码
                  去执行栈里执行就可以了

                  异步不强调结果，这要在在执行栈里排了号，就会去执行，至于啥时候执行，不知道，但是执行完的结果一定会通知浏览器

            js 特点：
                1. 首先是单线程的
                2. 它是异步执行的
        */ 

        // 初始的时候，定义了全局变量 a，并且进行了赋值 --- 初始化全局变量的操作
        var a = 0
       
        // 定义带参函数 b，打印参数
        function b(v) {
            console.log(v)
        }
        
        /*
            setTimeout：定时器，表示经过多长时间之后，执行某一个代码内容
            定义带参函数 fn，fn 函数内部为一个定时器，即在参数 t 毫秒之后，将全局变量 a 从 1 修改 3
        */ 
        function fn(t) {
            setTimeout(function () {
                a=3
            }, t);
        }
        
        //调用:
        console.log(a) //0
        fn(2000) // 表示 2s 之后才会修改全局变量 a
        b(a) // b 函数不会等到 fn 函数执行有了结果之后再去执行，而是 fn 函数进入了执行栈之后，我们就要去执行 b 函数
    </script>
</body>
</html>